﻿Imports System.Data
Imports System.Data.SqlClient
Imports ADOConnection

Public Class frmChuyenDuLieuKy
    Public kychuyen As Date

    'Thu tuc nay dung de kiem tra bat dau tu 1/1 la se chuyen doi du lieu dau nam
    Public Function KiemTraChuyenDuLieu() As Boolean
        Dim ngay As Date
        If Date.Now.Month >= 1 And Date.Now.Month < 7 Then
            ngay = CDate("1/1/" + Date.Now.Year.ToString())
        ElseIf Date.Now.Month >= 7 And Date.Now.Month < 1 Then
            ngay = CDate("7/1/" + Date.Now.Year.ToString())
        End If
        Dim objReader As SqlDataReader = Nothing
        Try
            Dim strSQL As String = "select * from tblNGAYDAUKY where kychuyen ='" + ngay.Date.ToString + "'"
            objReader = BaseDB.ExecSql_DataReader(strSQL)
            'Neu da chuyen roi
            If objReader.Read() Then
                objReader.Close()
                Return True
            Else
                Dim str As String
                str = String.Format("Bắt đầu sang ngày {0}/{1}/{2} bạn phải thực hiện chuyển dữ liệu trước khi thêm phiếu mới. Bạn muốn thực hiện ngay lúc này?", ngay.Day.ToString(), ngay.Month.ToString(), ngay.Year.ToString())
                If MessageBox.Show(str, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
                    'MessageBox.Show("Bạn cần sao lưu dữ liệu trước khi chuyển đổi dư liệu.", "Thông báo")
                    Dim frmTL As New frmTrichLuuDuLieu
                    frmTL.ShowDialog()
                    If Not frmTL.isTrichLuu Then
                        MessageBox.Show("Bạn cần phải trích lưu trước khi thêm phiếu mới.", "Thông báo")
                        Return False
                    End If
                    'Xu ly chuyen du lieu neu la thang 1
                    If ngay.Month = 1 Then
                        BaseDB.ExecSqlProcedure_NoneQuery("sp_ChuyenDuLieuDauNam")
                    ElseIf ngay.Month = 7 Then
                        BaseDB.ExecSqlProcedure_NoneQuery("sp_ChuyenDuLieuGiuaNam")
                    End If
                    str = "insert into tblCHUYENDULIEU(kychuyen,nguoichuyen,ngaygiochuyen) values('" + ngay.ToShortDateString + "', N'" + g_User.FullName.ToString() + "'," + Date.Now + ")"
                    BaseDB.ExecSql_NoneQuery(str)
                    str = String.Format("Đã chuyển dữ liệu cho ngày {0}/{1}/{2} xong.", ngay.Day.ToString(), ngay.Month.ToString(), ngay.Year.ToString())
                    MessageBox.Show(str, "Thông báo.")
                    objReader.Close()
                    Return True
                End If
            End If
        Catch ex As Exception
            objReader.Close()
            Return False
            Throw ex
        End Try
        Return False
    End Function

    Private Sub frmChuyenDuLieuKy_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim str As String = ""
        kychuyen = CDate("1/1/" + Date.Now.Year.ToString())
        txtThongtin.Text = "Chuyển dữ liệu kỳ " + Format(kychuyen, FormatDateStyle()) + _
        " sẽ tính lại số lượng tồn đầu kỳ của năm " + kychuyen.Year.ToString() + _
        " cho các mặt hàng. Các phiếu nhập xuất năm " + (kychuyen.Year - 1).ToString() + " sẽ được xóa đi. Cơ sở dữ liệu của năm " + (kychuyen.Year - 1).ToString() + " sẽ được trích lưu thành một CSDL mới trước khi chuyển dữ liệu. Phiếu nhập xuất và kiểm kê đầu năm của năm " + kychuyen.Year.ToString() + " chỉ thực hiện được sau khi đã chuyển dữ liệu xong."

        Dim objReader As SqlDataReader = Nothing
        Try
            Dim strSQL As String = "select * from tblNGAYDAUKY where kychuyen ='" + kychuyen.ToShortDateString + "'"
            objReader = BaseDB.ExecSql_DataReader(strSQL)
            If objReader.Read() Then 'Neu da chuyen roi
                txtTinhTrang.Text = "Hiện tại đã chuyển rồi"
                txtKyChuyen.Text = objReader.GetValue(0)
                txtUser.Text = objReader.GetString(1)
                dtNgayChuyen.Value = objReader.GetValue(2)
                btnChuyen.Enabled = False
            Else
                txtTinhTrang.Text = "Hiện tại chưa chuyển"
                txtKyChuyen.Text = Format(kychuyen, FormatDateStyle())
                txtUser.Text = g_User.FullName
                dtNgayChuyen.Value = Date.Now()
            End If
        Catch ex As Exception
            objReader.Close()
            Throw ex
        End Try
    End Sub

    Private Sub btnChuyen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChuyen.Click
        'Kiểm tra tất cả phiếu đã được Tài chính xác nhận chưa?
        'Return: True nếu đã xác nhận hết , False nếu chưa xác nhận hết
        If CPhieuNXs.IsTatCaPhieuDaXacNhanTC() = False Then
            ShowMessages("Vẫn còn Phiếu nhập xuất chưa được Tài chính xác nhận nên không thể thực hiện chuyển dữ liệu đầu kỳ.")
            Exit Sub
        End If

        ShowMessages("Kiểm tra các số liệu đã khớp chưa.")
        Dim frm As New frmKiemTraMatHangChenhLech()
        frm.ShowDialog()

        BaseDB.ExecSql_NoneQuery("delete tblTRICHLUU")
        Dim frmTL As New frmTrichLuuDuLieu
        frmTL.ShowDialog()
        If Not frmTL.isTrichLuu Then
            MessageBox.Show("Bạn cần phải trích lưu trước khi chuyển kỳ dữ liệu.", "Thông báo")
            Exit Sub
        End If
        'Xu ly chuyen du lieu
        Try
            BaseDB.ExecSqlProcedure_NoneQuery("sp_ChuyenDuLieuDauNam")
            Dim str As String = "insert into tblNGAYDAUKY values('" + kychuyen.ToShortDateString + "', N'" + g_User.FullName.ToString() + "', getdate())"
            BaseDB.ExecSql_NoneQuery(str)
            str = String.Format("Đã chuyển dữ liệu cho ngày {0} xong.", Format(kychuyen, FormatDateStyle()))
            MessageBox.Show(str, "Thông báo.")
            Me.Close()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub btnThoat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThoat.Click
        Me.Close()
    End Sub
End Class